package com.gxa.controller;

import com.gxa.util.JsonResult;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.Map;
import java.util.UUID;

/**
 * @program: Spring_myBatis
 * @description: 上传
 * @author: Tirion
 * @create: 2020-09-17 15:19
 **/
@RestController("upload")  //@RestController相当于@Controller+@ResponseBody
public class UploadController {

//    @RequestMapping(value = "/upload",method = RequestMethod.POST)
    // 通过MultipartFile对象接收前端传递的图像数据,基于layui只能用file获取目标参数名(默认,不能修改)

    //HttpServletRequest为了获取Context,从而获取"/"真实路径
    @PostMapping(value = "/upload")
    public Map<String,Object> upload(@RequestParam("file") MultipartFile multipartFile, HttpServletRequest request) throws IOException {
        //桌面图片854412141.jpeg
        String originalFilename = multipartFile.getOriginalFilename();
        System.out.println("originalFilename:"+originalFilename);
        // 从原始文件名中获取后缀,作为新添加的文件的文件名后缀(匹配)
        String subfix = originalFilename.substring(originalFilename.indexOf(".")+1);
        System.out.println("subfix:"+subfix); //输出文件后缀

        //使用UUID作为文件名,保证服务器中存放的文件名唯一
        String targetFile = UUID.randomUUID().toString().replace("-","")+"."+subfix;
        System.out.println("targetFile:"+targetFile); //输出目标文件名

        // 通过request获取当前程序的根路径"/"
        String path = request.getServletContext().getRealPath("/");
        String fileName = path+"uploadImg/"+targetFile;
        System.out.println("fileName:"+fileName);  //输出文件完整地址

        // 构建文件对象
        File uploadFile = new File(fileName);
        //核心操作(含有异常操作, 利用异常设定状态码(和前端约定)
        // 此处应当和ExceptionController结合, 当try执行成功则设定状态码0
        // 出现异常则设定其他
        // 再将异常信息结合BusinessException抛出, 交给ExceptionController处理
        try {
            multipartFile.transferTo(uploadFile);
        } catch (IOException e) {
            //e.printStackTrace();
            throw e;
        }

        JsonResult jsonResult = new JsonResult();

        // 返回状态:0 表示上传成功
        jsonResult.setCode("200");
        // 返回服务器保存后的文件名
        jsonResult.put("fileName",targetFile);
        return jsonResult.getValues();
    }
}
